home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 004 / mathstat.arc / NORMAL-Z.BAS < prev    next >
BASIC Source File  |  1982-06-06  |  7KB  |  134 lines

  1. 100  '**********************************************************************
  2. 110  '********                                                   ***********
  3. 120  '********           NORMAL DISTRIBUTION ROUTINES            ***********
  4. 130  '********                                                   ***********
  5. 140  '**********************************************************************
  6. 150  '            *   COPYRIGHT 1982 - CRAIG W. UTHE          *
  7. 160  '            *   WRITTEN 3/3/82 BY CRAIG W. UTHE         *
  8. 170  '            *                 * * * *                   *
  9. 180  '            *   ANY INDIVIDUAL MAY COPY THIS PROGRAM    *
  10. 190  '            *   AND MAKE MODIFICATIONS TO IT IF THAT    *
  11. 200  '            *   INDIVIDUAL ARRANGES TO CONTRIBUTE ONE   *
  12. 210  '            *   OTHER PROGRAM TO THE PHILA. AREA IBM    *
  13. 215  '            *   PC USER GROUP PUBLIC DOMAIN SOFTWARE    *
  14. 220  '            *   EXCHANGE LIBRARY.  HOWEVER, COPIES      *
  15. 230  '            *   ARE NOT ALLOWED TO BE SOLD, NOT IN      *
  16. 240  '            *   WHOLE NOR IN PART, NOT SEPARATELY       *
  17. 250  '            *   NOR JOINTLY WITH OTHER SOFTWARE.        *
  18. 260  '            *********************************************
  19. 270  '
  20. 280  '
  21. 1000 'MASTER-CONTROL ROUTINE
  22. 1010     CLS
  23. 1020     PRINT "This program computes areas under the normal distribution"
  24. 1030     PRINT "probability curve from the mean to a designated `Z' value."
  25. 1040     PRINT "This program also can compute `Z' values from a given area."
  26. 1050     PRINT
  27. 1060     PRINT "Just as in most statistical tables, only half the curve is
  28. 1070     PRINT "considered.  Z values must be between -4 and +4 (these"
  29. 1080     PRINT "limits are somewhat arbitrary) and area figures must be"
  30. 1090     PRINT "between 0 and 0.5 (actually .49997).  If out-of-range"
  31. 1100     PRINT "figures are input, the nearest range limit is assumed"
  32. 1110     PRINT "instead."
  33. 1120     PRINT
  34. 1130     PRINT "HIT ANY KEY TO START"
  35. 1140     SELECTION$ = INKEY$ : IF SELECTION$ = "" THEN GOTO 1140 'SAME LINE
  36. 1150     ' Area results (given Z) are accurate to the 5 displayed digits.
  37. 1160     ' Z values are accurate to 2 digits based on an input area,
  38. 1170     ' or the 3 displayed digits based on the program's approximation
  39. 1180     ' of that area.
  40. 1190     '
  41. 1200     ' This precision can be changed by changing the precision
  42. 1210     ' constants in the program from their 0.000001 setting.
  43. 1220     ' For higher precision, you might also want to change the
  44. 1230     ' variables to double, instead of single, precision form.
  45. 1240     ' With higher precision, you may wish to change the number
  46. 1250     ' of digits displayed, too.
  47. 1260     '
  48. 1270     ' Out of respect, please do not mutilate the structured
  49. 1280     ' programming approach that makes changes so easy and
  50. 1290     ' makes the program almost readable.  Of course you can
  51. 1300     ' easily use the subroutines in more elaborate programs.
  52. 1310     ' This program is fairly insignificant by itself.
  53. 1320     '
  54. 1330     SELECTION$ = "1" 'initialization
  55. 1340     WHILE (SELECTION$ = "1" OR SELECTION$ = "2")
  56. 1350         CLS : PRINT STRING$(60,42)
  57. 1360         PRINT : PRINT "MENU:"
  58. 1370         PRINT : PRINT "     <1> . . . . . . . . COMPUTE AREA FROM Z"
  59. 1380         PRINT : PRINT "     <2> . . . . . . . . COMPUTE Z VALUE FROM AREA"
  60. 1390         PRINT : PRINT "     <ANY OTHER KEY> . . EXIT PROGRAM"
  61. 1400         PRINT : PRINT STRING$(60,45)
  62. 1410         PRINT : PRINT "HIT ANY KEY IN INDICATED RANGE TO MAKE SELECTION:"
  63. 1420         SELECTION$ = INKEY$ : IF SELECTION$ = "" THEN GOTO 1420 'SAME LINE
  64. 1430         CLS : PRINT "THANK YOU."
  65. 1440         IF 0 = INSTR("12",SELECTION$)                                                       THEN : PRINT "I HOPE THE PROGRAM WAS USEFUL TO YOU.  BYE."                             : GOTO 1480 'WEND
  66. 1450         ON INSTR("12",SELECTION$) GOSUB 3000,2000
  67. 1460             'IE:  IF 1, GOSUB COMPUTE-Z-FROM-AREA ROUTINE
  68. 1470             '     IF 2, GOSUB COMPUTE-AREA-FROM-Z ROUTINE
  69. 1480         WEND
  70. 1490     END
  71. 1500 '
  72. 1510 '
  73. 2000 'COMPUTE-Z-FROM-AREA ROUTINE
  74. 2010     PRINT : PRINT STRING$(80,42) : PRINT
  75. 2020     QUIT% = 0
  76. 2030     WHILE NOT QUIT%
  77. 2040            PRINT "INPUT AREA VALUE FROM WHICH TO COMPUTE FREQUENCY."
  78. 2050            PRINT "(ENTRIES OVER 5.0 CAUSE RETURN TO MENU.)"
  79. 2060            INPUT "INPUT AREA VALUE (0 TO 0.49997): ",AREA
  80. 2070            IF AREA > 5 THEN QUIT% = -1 : GOTO 2230 'WEND
  81. 2080            HI.CALCULATED.AREA = .49997 : HI.Z = 4  '*** area < .49997
  82. 2090            LO.CALCULATED.AREA = 0      : LO.Z = 0  '*** area > 0
  83. 2100            IF AREA >= .49997 THEN CALCULATED.AREA = .49997 : Z = 4                                                 : GOTO 2170
  84. 2110            IF AREA <= 0 THEN CALCULATED.AREA = 0 : Z = 0 : GOTO 2170 'PRNT
  85. 2120            WHILE ABS(CALCULATED.AREA - AREA) > .000001
  86. 2130                    IF AREA > CALCULATED.AREA                                                          THEN LO.CALCULATED.AREA = CALCULATED.AREA : LO.Z = Z                            ELSE HI.CALCULATED.AREA = CALCULATED.AREA : HI.Z = Z
  87. 2140                    Z = (LO.Z + HI.Z) / 2
  88. 2150                    GOSUB 4000 'McLAUREN-METHOD-AREA-CALCULATION ROUTINE
  89. 2160                    WEND
  90. 2170            PRINT : PRINT "THE NORMAL-DISTRIBUTION Z-VALUE CORRESPONDING"
  91. 2180                    PRINT "TO A MEAN-TO-Z AREA OF ";
  92. 2190                    PRINT USING "#.#####"; CALCULATED.AREA;
  93. 2200                    PRINT " is:  ";
  94. 2210                    PRINT USING "#.###"; Z
  95. 2220            PRINT : PRINT STRING$(80,42) : PRINT
  96. 2230            WEND
  97. 2240     RETURN
  98. 2250 '
  99. 3000 'COMPUTE-AREA-FROM-Z ROUTINE
  100. 3010     PRINT : PRINT STRING$(80,42) : PRINT
  101. 3020     QUIT% = 0
  102. 3030     WHILE NOT QUIT%
  103. 3040            PRINT "INPUT Z VALUE FROM WHICH TO COMPUTE FREQUENCY."
  104. 3050            PRINT "(ENTRIES OVER 5.0 CAUSE RETURN TO MENU.)"
  105. 3060            INPUT "INPUT Z VALUE (-4.0 TO +4.0):  ", Z
  106. 3070            IF Z >= 5 THEN QUIT% = -1 : GOTO 3150 'WEND
  107. 3080            IF ABS(Z) >= 4 THEN CALCULATED.AREA = .49997 : Z.SGN% = SGN(Z)                                  : Z = 4 :GOTO 3100 'PRINT OUTPUT
  108. 3090            GOSUB 4000 'McLAUREN-METHOD-AREA-CALCULATION ROUTINE
  109. 3100            PRINT :PRINT "THE AREA UNDER THE NORMAL DISTRIBUTION CURVE"
  110. 3110                    PRINT "FROM THE MEAN TO Z = " Z.SGN%*Z " IS:  ";
  111. 3120                    PRINT USING "#.#####"; CALCULATED.AREA
  112. 3130            PRINT
  113. 3140            PRINT : PRINT STRING$(80,42) : PRINT
  114. 3150            WEND
  115. 3160     RETURN
  116. 3170 '
  117. 4000 'McLAUREN-METHOD-AREA-CALCULATION ROUTINE
  118. 4010     '
  119. 4020     Z.SGN% = SGN(Z) : Z = ABS(Z) : Z.SQR = Z*Z
  120. 4030     CALCULATED.AREA = Z * (1/SQR(2*3.141592654#))
  121. 4040     Z.CONSTANT = CALCULATED.AREA
  122. 4050     PRECISION.ERROR = 1 : INTERMEDIATE.TERM = 1 : I% = 1
  123. 4060     '
  124. 4070     WHILE ABS(PRECISION.ERROR) > .000001
  125. 4080            INTERMEDIATE.TERM = -(INTERMEDIATE.TERM * Z.SQR) / (2*I%)
  126. 4090            PRECISION.ERROR = Z.CONSTANT * (INTERMEDIATE.TERM / (2*I% + 1))
  127. 4100            CALCULATED.AREA = CALCULATED.AREA + PRECISION.ERROR
  128. 4110            I% = I% + 1
  129. 4120            WEND
  130. 4130            CALCULATED.AREA = CALCULATED.AREA - PRECISION.ERROR
  131. 4140     RETURN
  132.       I% = I% + 1
  133. 4120            WEND
  134. 4130